home *** CD-ROM | disk | FTP | other *** search
- name SKL
-
- CSEG SEGMENT
-
- ASSUME CS:CSEG,DS:CSEG,ES:CSEG
-
- ORG 100H
-
- ENTRADA:
- JMP INSTALAR
-
- MANEJADOR PROC FAR
-
- JMP INICIO
- INT9VEC LABEL DWORD ;variables
- INT9DES DW 0
- INT9SEG DW 0
- SW DB 0
- SWON DB 40,40,41,41,10,10,30,8
-
- INICIO:
- VECTOR EQU CS
- PUSHF
- PUSH AX
- PUSH DS
- XOR AX,AX
- MOV DS,AX
- MOV AL,DS:[0417h] ;leer estado de teclas APTDO 1
- AND AL,5 ;aqui se coloca el valor de las teclas a pulsar
- CMP AL,5 ;podemos variarlas segun necesitemos
- JNE ETI1 ;si no son continuar int 9
- PUSH DX ;ver tipo de tarjeta
- PUSH SI
- MOV DX,03C0H
- IN AL,DX
- CMP AL,0FFH
- JNE EGA ;si no es cga ir a ega,vga
- CGA:
- MOV DX,DS:[0463H]
- MOV AL,VECTOR:SW
- CMP AL,0
- JE APAGA ;si esta activada la pantalla, apagarla
- XOR AX,AX
- MOV AL,DS:[0449H]
- MOV SI,AX
- CMP AL,07
- JNE SIGUE
- MOV AL,DS:[0460H]
- CMP AL,03
- JA SIGUE
- ADD SI,+4
- SIGUE:
- ADD DX,+04 ;encender la pantalla
- MOV AL,VECTOR:SWON + [SI]
- OUT DX,AL
- MOV AL,0
- MOV VECTOR:SW,AL
- JMP ETI3
- APAGA:
- ADD DX,4
- MOV AL,0
- OUT DX,AL
- MOV AL,0FFH
- MOV VECTOR:SW,AL
- JMP ETI3
- EGA:
- MOV DX,DS:[0463h]
- ADD DX,+06
- IN AL,DX
- MOV AL,VECTOR:SW
- MOV DX,03C0H
- OUT DX,AL
- XOR AL,0FFh ;cambiar pantalla de on a off y viceversa
- MOV VECTOR:SW,AL
- JMP ETI3
- ETI1:
- MOV AL,VECTOR:SW ;si pantalla esta apagada desactivar teclado
- CMP AL,0
- JE ETI4
- IN AL,60H
- MOV AH,AL
- PUSH AX
- IN AL,61H
- OR AL,80H
- OUT 61H,AL
- AND AL,7FH
- OUT 61H,AL
- POP AX ;APTDO 2 aqui hemos de colocar los codigos
- MOV AL,255 ;de rastreo de las teclas en AH y el valor
- CMP AH,29 ;a mover al BIOS segun la tecla, en AL
- JE SIGUE1 ;
- SUB AL,4 ;
- CMP AH,54 ;
- JE SIGUE2 ;
- SUB AL,1 ;
- AND DS:[0417h],AL ;
- JMP ETI2 ;
- SIGUE1: ;
- MOV AL,4 ;
- OR DS:[0417h],AL ;
- JMP ETI2 ;
- SIGUE2: ;
- MOV AL,1 ;
- OR DS:[0417h],AL ;
- ETI2:
- MOV AL,20H
- OUT 20H,AL
- POP DS
- POP AX
- POPF
- IRET
-
-
- ETI3:
- POP SI
- POP DX
- ETI4:
- POP DS
- POP AX
- POPF
- JMP VECTOR:INT9VEC
-
- MANEJADOR ENDP
-
- INSTALAR PROC
-
- LONG EQU $-ENTRADA
- PUSHF
- PUSH AX
- PUSH BX
- PUSH CX
- PUSH ES
- PUSH SI
- PUSH DI
- MOV AX,3509H ;salvar segmento y offset de int 9
- INT 21H
- MOV INT9SEG,ES
- MOV INT9DES,BX
- MOV SI,OFFSET INICIO ;comprobar si el programa ya esta en
- MOV DI,SI ;memoria
- CLD
- MOV CX,100
- REPZ CMPSB
- JZ SALIR ;si lo esta acabar
- MOV AX,2509H
- MOV DX,OFFSET MANEJADOR ;direccionar nueva int 9 y preparar
- XOR BX,BX ;mensaje en pantalla
- MOV SI,075H
- MOV CX,07
- CSN:
- MOV BL,TABLA[SI]
- ADD DX,BX
- INC SI
- LOOP CSN
- SUB DX,02BDH
- INT 21H
- MOV AX,0600H
- XOR CX,CX
- MOV BH,7
- MOV DX,2479H
- INT 10H
- XOR BX,BX
- MOV AH,2
- MOV DH,2
- MOV DL,2
- INT 10H
- XOR SI,SI
- CALL WRITE
- CALL WRITE
- CALL WRITE
- ADD SI,96
- CALL WRITE
- SUB SI,128
- CALL WRITE
- ADD SI,64
- CALL WRITE
- SUB SI,96
- CALL WRITE
- CALL WRITE
- MOV AH,2 ;posicionar cursor despues del mensaje
- MOV DH,20 ;y calcular memoria a reservar
- MOV DL,0
- INT 10H
- MOV DX,((OFFSET LONG + 15)/16)+10H
- MOV AX,3100H
- INT 21H ;acabar y dejar residente
- SALIR:
- MOV AH,09
- MOV DX,OFFSET RESIDE
- INT 21h
- POP DI
- POP SI
- POP ES
- POP CX
- POP BX
- POP AX
- POPF
- INT 20H ;acabar si ya estaba residente
-
- INSTALAR ENDP
-
- WRITE PROC
-
- PUSH AX ;se usa para escribir en pantalla el mensaje
- PUSH BX
- PUSH CX
-
- MOV CX,32
- LIN:
- MOV BX,001Fh
- MOV AH,9
- MOV AL,DS:TABLA[SI]
- INT 10H
- INC SI
- INC DL
- MOV AH,2
- INT 10H
- LOOP LIN
-
- MOV DL,2
- INC DH
- MOV AH,2
- INT 10H
-
- POP CX
- POP BX
- POP AX
-
- RET
-
- WRITE ENDP ; mensajes de pantalla a continuacion
-
- TABLA DB 213, 30 DUP (205),184
- DB 179,' Screen-Key-Lock Ver 1.50 ',179
- DB 179,' IBM-PC/XT/AT ',179
- DB 179,' Copyright Fernando PayĆ” ',179
- DB 179,' (C) 1991,92 PC-Systems ALCOY ',179
- DB 212, 30 DUP (205),190
- DB 179, 30 DUP (0),179
- RESIDE DB 'Screen-Key-Lock ya Residente',24h
-
- CSEG ENDS
-
- END ENTRADA
-
-